package main

import "fmt"

/**
Go 语言中数组可以存储同一类型的数据，但在结构体中我们可以为不同项定义不同的数据类型。
结构体是由一系列具有相同类型或不同类型的数据构成的数据集合。
结构体表示一项记录，比如保存图书馆的书籍记录，每本书有以下属性：
Title ：标题
Author ： 作者
Subject：学科
ID：书籍ID
定义结构体
结构体定义需要使用 type 和 struct 语句。struct 语句定义一个新的数据类型，结构体中有一个或多个成员。type 语句设定了结构体的名称。结构体的格式如下：
type struct_variable_type struct {
   member definition
   member definition
   ...
   member definition
}
*/
type Book struct {
	auther string
	price  float64
	name   string
}

func main() {
	var book Book

	var book2 *Book
	book2 = &book
	book3 := new(Book)
	book.name = "go语言从入门到精通"
	book.auther = "zhangsan"
	book.price = 25.6
	printBook1(&book)
	printBook2(book)
	book3 = book2
	fmt.Println("指针测试")
	printBook1(book2)
	fmt.Println(&book == book2)
	fmt.Println(&book == book3)

	book4 := Book{auther: "hello"}
	printBook1(&book4)
}

func printBook1(book *Book) {
	fmt.Println("名称：", book.name)
	fmt.Printf("作者：%s \n", book.auther)
	fmt.Printf("价格：%f \n", book.price)
}

func printBook2(book Book) {
	fmt.Println("名称：", book.name)
	fmt.Printf("作者：%s \n", book.auther)
	fmt.Printf("价格：%f \n", book.price)
}
